/**
 * 数据库迁移脚本：为 tb_knowledge 表添加 excalidraw 列
 * 
 * 使用方法：
 * 1. 在 backend-service 目录下运行：node src/migration/add-excalidraw-column.js
 * 2. 或者在项目根目录运行：node backend-service/src/migration/add-excalidraw-column.js
 */

const sqlite3 = require('sqlite3').verbose();
const path = require('path');

// 数据库文件路径
const dbPath = path.join(__dirname, '../../data/words.db');

console.log('开始数据库迁移...');
console.log('数据库路径:', dbPath);

// 连接数据库
const db = new sqlite3.Database(dbPath, (err) => {
  if (err) {
    console.error('连接数据库失败:', err.message);
    process.exit(1);
  }
  console.log('成功连接到数据库');
});

/**
 * 检查列是否存在
 */
function checkColumnExists() {
  return new Promise((resolve, reject) => {
    db.all("PRAGMA table_info(tb_knowledge)", (err, rows) => {
      if (err) {
        reject(err);
        return;
      }
      
      const hasExcalidrawColumn = rows.some(row => row.name === 'excalidraw');
      resolve(hasExcalidrawColumn);
    });
  });
}

/**
 * 添加 excalidraw 列
 */
function addExcalidrawColumn() {
  return new Promise((resolve, reject) => {
    const sql = 'ALTER TABLE tb_knowledge ADD COLUMN excalidraw TEXT';
    
    db.run(sql, (err) => {
      if (err) {
        reject(err);
        return;
      }
      resolve();
    });
  });
}

/**
 * 执行迁移
 */
async function runMigration() {
  try {
    // 检查表是否存在
    const tableExists = await new Promise((resolve, reject) => {
      db.get("SELECT name FROM sqlite_master WHERE type='table' AND name='tb_knowledge'", (err, row) => {
        if (err) {
          reject(err);
          return;
        }
        resolve(!!row);
      });
    });

    if (!tableExists) {
      console.log('tb_knowledge 表不存在，可能需要先创建表');
      console.log('请确保应用程序已经运行过一次以创建基础表结构');
      process.exit(1);
    }

    // 检查 excalidraw 列是否已存在
    const columnExists = await checkColumnExists();
    
    if (columnExists) {
      console.log('excalidraw 列已存在，无需迁移');
    } else {
      console.log('添加 excalidraw 列...');
      await addExcalidrawColumn();
      console.log('成功添加 excalidraw 列');
    }
    
    console.log('数据库迁移完成！');
    
  } catch (error) {
    console.error('迁移失败:', error.message);
    process.exit(1);
  } finally {
    // 关闭数据库连接
    db.close((err) => {
      if (err) {
        console.error('关闭数据库连接失败:', err.message);
      } else {
        console.log('数据库连接已关闭');
      }
    });
  }
}

// 执行迁移
runMigration();